#ifndef MEDIASTUDY_RTMPHELPER_H
#define MEDIASTUDY_RTMPHELPER_H

// H264的标志位的长度
#define H264_FLAG_LENGTH 4

// 视频类型的包
#define VIDEO_TYPE  0
// 音频类型的头包
#define AUDIO_HEAD_TYPE  1

extern "C" {
#include "librtmp/rtmp.h"
}

/**
* 定义结构体
*/

class RtmpHelper {

public:

    typedef struct {
        RTMP *rtmp;

        int16_t sps_len;
        int8_t *sps;

        int16_t pps_len;
        int8_t *pps;
    } Live;

    Live *live = nullptr;

    // rtmp 连接
    int connect(char *string);

    // 发送数据
    void sendData(jbyte *buffer, int length, int type);

    // 发送数据包
    int sendPacket(RTMPPacket *packet);

    void disconnect();

private:
    // 视频帧相关
    void sendVideoData(const int8_t *buf, int length);

    // 创建SPS和PPS的Packet
    RTMPPacket *createSPS_PPSPacket(int8_t *sps, int8_t *pps, int sps_len, int pps_len);

    // 准备视频头数据(SPS PPS);
    static void setSpsAndPpsByDSP(const int8_t *buf, int length, Live *live);

    // 创建I B P帧的数据包
    RTMPPacket *createVideoPacket(const int8_t *buf, int length);
};

#endif
